import { Base } from '../common/utils/base.js';
Component({
	/**
	 * 组件的属性列表
	 */
	properties: {
		//url请求地址
		url: {
			type: String,
			value: ""
		},
		//请求类型:get,post
		type: {
			type: String,
			value: "get"
		},
		//请求参数
		params: {
			type: Object,
			value: {}
		},
		//数据格式
		parseData: {
			type: String,
			value: "data"
		},
		//每页条数
		limit: {
			type: Number,
			value: 10
		},
		//加载方式 : pullUpLoad:上拉加载,clickButtonLoad:点击按钮加载
		loadMode: {
			type: String,
			value: "pullUpLoad"
		},
		//返回数据状态:默认false不返回所有,true返回所有
		returnDataState: {
			type: Boolean,
			value: false
		},
		//为空描述
		emptyDes: {
			type: String,
			value: "没有搜索到相关信息"
		},
		//是否开启槽 ,分为:上槽:top,中槽:center,下槽:bottom
		slotState: {
			type: Boolean,
			value: false
		},

	},
	observers: {
		//监听请求参数,有变动就重新请求
		'params': function (value) {
			//监听参数是否有变化
			if (this.data.isParams) {
				this.setData({
					page: 1
				})
				this.loadData();
			}
		}
	},
	//启用插槽
	options:{
		multipleSlots:true
	},
	ready: function () {
		this.loadData();
	},

	/**
	 * 组件的初始数据
	 */
	data: {
		height: '',
		page: 1,//分页
		isSlide: true,//是否滑动:true滑动,false不滑动
		//empty:暂无数据,pullUpLoad:上拉加载更多,dropDownLoading:下拉加载更多,oneLoad:第一次加载,loading:加载中,noMore:没有更多了
		flag: 'empty',
		refresh: false,//下拉刷新

		margintop: 0, //滑动下拉距离
		isParams: false,//监听参数是否有变化



		pull: {},
        push: {},
        slideStart: [],
        moveTime: 0,
	},

	/**
	 * 组件的方法列表
	 */
	methods: {
		loadData() {
			console.log('bottom')
			if(Base.isEmpty(this.data.url)){
				//监听参数是否有变化
				this.setData({
					isParams: true
				});
				return false;
			}

			this.setData({
				isSlide: false,
				flag: this.data.page == 1 ? 'oneLoad' : 'loading',
				isParams: true
			});

			var params = {};
			params = this.data.params;
			params.page = this.data.page;

			//get方式请求
			if (this.data.type == 'get') {
				//转成get方式传值?id=1&name=raymond
				params = Base.parseParams(params);
				var url = this.data.url + params
				var data = {};
			} else {
				//post方式请求
				var url = this.data.url;
				var data = params;
			}

			Base.request({
				url: url,
				method: this.data.type,
				data: data,
				success: (res) => {
					var data = this.modifyDataFormat(res);

					var obj = {};
					// obj.refresh=false;
					if (data == "") {
						obj.flag = 'noMore';
						if (data == "" && this.data.page == 1) {
							obj.flag = 'empty';
						}
						this.setData(obj);
						//数据传回去
						this.dataReturn({
							dataStatus:obj.flag ,//数据状态
							data: this.data.returnDataState ? res : data,
							refresh: this.data.refresh,
							page: this.data.page,//分页
						});
						return false;
					}


					obj.flag = 'pullUpLoad';
					//结果集中数据条数不够的话显示没有更多按钮
					if (this.data.limit > data.length) {
						obj.flag = 'noMore';
					}
					obj.isSlide = true;



					this.data.page++;

					this.setData(obj);
					//数据传回去
					this.dataReturn({
						dataStatus:obj.flag ,//数据状态
						data: this.data.returnDataState ? res : data,
						refresh: this.data.refresh,
						page: this.data.page,//分页
					});

					this.setData({ refresh: false });
				}
			});
		},
		//数据回传
		dataReturn(data){
			//数据传回去
			this.triggerEvent("loadData", data);
		},
		//修改数据格式
		modifyDataFormat(data) {
			var result = [];
			let parseData = this.data.parseData.split('.');
			if (parseData.length == 1) {
				result = data[parseData[0]];
			} else if (parseData.length == 2) {
				result = data[parseData[0]][parseData[1]];
			} else if (parseData.length == 3) {
				result = data[parseData[0]][parseData[1]][parseData[2]];
			} else if (parseData.length == 4) {
				result = data[parseData[0]][parseData[1]][parseData[2]][parseData[3]];
			} else if (parseData.length == 5) {
				result = data[parseData[0]][parseData[1]][parseData[2]][parseData[3]][parseData[4]];
			}
			return result;
		},
	}
})
